package com.concurrent.publish;

import com.concurrent.annotations.NotRecommend;
import com.concurrent.annotations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;

/**
 * @author: zhouyang
 * @descrpition:
 * @time: 2019-05-05 13:10
 */
@Slf4j
@NotThreadSafe
@NotRecommend
public class Escape {
    private int thisCanBeEscape = 0;
    public Escape(){
        new InnerClass();
    }

    //对象没有被完成构造之前就被发布 this会被其它线程看到 会被其它线程看到过期的值
    //应该使用工厂模式 或者私有构造方法正确启动
    private class InnerClass{
        public InnerClass(){
            log.info("{}",Escape.this.thisCanBeEscape);
        }
    }

    public static void main (String[] args) {
        new Escape();
    }
}
